package main

import (
	"fmt"
	"path/filepath"
	"strings"
)

func main() {
	fmt.Println("=== 文件监控修复测试 ===")

	// 测试路径标准化和匹配逻辑
	testCases := []struct {
		filePath    string
		directories []string
		expected    string
	}{
		{
			filePath: "D:\\2025年项目\\技术类项目\\go文件感知国产模型\\test\\测试知识 国资委监管制度\\法治建设\\关于实施《贵州省国资委监管企业资产法律认定暂行办法》有关问题的通知.md",
			directories: []string{
				"D:\\2025年项目\\技术类项目\\go文件感知国产模型\\test\\测试知识 国资委监管制度",
			},
			expected: "D:\\2025年项目\\技术类项目\\go文件感知国产模型\\test\\测试知识 国资委监管制度",
		},
		{
			filePath: "/home/user/project/src/main.go",
			directories: []string{
				"/home/user/project",
				"/home/user/project/src",
			},
			expected: "/home/user/project/src",
		},
	}

	for i, tc := range testCases {
		fmt.Printf("\n--- 测试用例 %d ---\n", i+1)
		fmt.Printf("文件路径: %s\n", tc.filePath)
		fmt.Printf("候选目录: %v\n", tc.directories)

		// 标准化文件路径
		normalizedFilePath := filepath.Clean(tc.filePath)
		fmt.Printf("标准化文件路径: %s\n", normalizedFilePath)

		// 找到最匹配的目录
		var bestMatch string
		var bestMatchLen int

		for _, dir := range tc.directories {
			normalizedDir := filepath.Clean(dir)
			fmt.Printf("检查目录: %s\n", normalizedDir)

			if isFileInDirectory(normalizedFilePath, normalizedDir) {
				fmt.Printf("  ✅ 文件在此目录下\n")
				if len(normalizedDir) > bestMatchLen {
					bestMatch = normalizedDir
					bestMatchLen = len(normalizedDir)
					fmt.Printf("  ✅ 更新最佳匹配: %s\n", bestMatch)
				}
			} else {
				fmt.Printf("  ❌ 文件不在此目录下\n")
			}
		}

		if bestMatch == tc.expected {
			fmt.Printf("✅ 测试通过: %s\n", bestMatch)
		} else {
			fmt.Printf("❌ 测试失败: 期望 %s, 实际 %s\n", tc.expected, bestMatch)
		}
	}

	fmt.Println("\n=== 测试完成 ===")
}

// isFileInDirectory 检查文件是否在指定目录下
func isFileInDirectory(filePath, dirPath string) bool {
	// 确保目录路径以分隔符结尾
	if !strings.HasSuffix(dirPath, string(filepath.Separator)) {
		dirPath += string(filepath.Separator)
	}
	
	// 确保文件路径以分隔符开始比较
	if !strings.HasSuffix(filePath, string(filepath.Separator)) {
		filePath += string(filepath.Separator)
	}
	
	result := strings.HasPrefix(filePath, dirPath) || strings.HasPrefix(filePath+string(filepath.Separator), dirPath)
	
	// 调试输出
	fmt.Printf("    比较: '%s' 是否以 '%s' 开头 -> %v\n", filePath, dirPath, result)
	
	return result
}